package com.xbongbong.sys.enums;

import com.xbongbong.i18n.util.I18nMessageUtil;
import java.util.ArrayList;
import java.util.List;
import lombok.Getter;

/**
 * @description: 公司架构类型枚举, 筛选组织架构使用
 * @Author: hongxiao
 * @date: 2019-02-27 10:59
 * @since v1.0
 */
@Getter
public enum CompanyStructTypeEnum {

    /**
     * USER，公司架构，筛选类型为员工
     */
    USER(1,"user", "enum.companyStructType.name.user"),
    /**
     * DEPARTMENT，公司架构，筛选类型为部门
     */
    DEPARTMENT(2,"department", "enum.companyStructType.name.department"),
    /**
     * ALL，公司架构，筛选类型为多选 （部门and员工 或者 多部门 或者多员工）
     */
    ALL(3,"all","enum.companyStructType.name.all"),
    /**
     * UNKNOWN，此项代表未筛选
     */
    UNKNOWN(404,"unknown", "enum.companyStructType.name.unknown"),
    ;

    /** 枚举值 -- */
    private final int code;
    /** 枚举描述 --英文名称*/
    private final String	alias;
    /** 枚举信息--中文名称 */
    private final String    name;

    CompanyStructTypeEnum(int code, String alias, String name) {
        this.code = code;
        this.alias = alias;
        this.name = name;
    }

    /**
     * 获取全部枚举
     *
     * @return List<CompanyStructTypeEnum>
     */
    public static List<CompanyStructTypeEnum> getAllEnum() {
        List<CompanyStructTypeEnum> list = new ArrayList<>();
        for (CompanyStructTypeEnum cache : values()) {
            list.add(cache);
        }
        return list;
    }

    /**
     * 根据code获取枚举
     * @return
     */
    public static CompanyStructTypeEnum getByCode(Integer code) {
        if (code == null) {
            return UNKNOWN;
        }
        for (CompanyStructTypeEnum cache : values()) {
            if (code == cache.getCode()) {
                return cache;
            }
        }
        return UNKNOWN;
    }

    public String getName() {
        return I18nMessageUtil.getMessage(name);
    }
}
